# # -*- encoding:utf-8 -*-
# # @time:2022-11-21 18:22
# # @Author : serein
# # @Email: serein@qq.com
# # @File:verifyUtil.py
# # @Software: PyCharm
#
# #图片验证码的实现
# #python最常用的图片模块：Pillow （PIL）
# #pycarm自动备注的操作：在setting中选择Tools,在选择python integrated Tools将Docstring format改成Epytext
# import os
# import string
# import random
# from PIL import Image,ImageFont,ImageColor,ImageDraw,ImageFilter
# from django_redis import get_redis_connection
#
# from config.dbs.redis_rev import LOGIN_KEY_TEMPLATE
#
#
# class ImageVerify:
#     def __init__(self,x=140,y=40,length=4,size=28):
#         """
#         @param x: 设置图片的宽度
#         @param y: 设置图片的高度
#         @param length: 设置答案的个数
#         @param size: 设置字体的尺寸
#         设置原始值
#         """
#         self.x = x
#         self.y = y
#         self.length = length
#         self.size = size
#     def random_str(self):
#         '''
#         随机生成26个字母和十个数字
#         @return: 生成字符串
#         random.sample是在source中随机生成length个不重复的随机数
#         '''
#         source = string.ascii_letters+string.digits
#         return ''.join(random.sample(source,self.length))
#     def random_color(self,start=0,end=288):
#         """
#         随机生成RGB颜色
#         @param start: 颜色范围的最小值
#         @param end: 颜色范围的最大值
#         @return: tuple()转化为元组格式
#         """
#         res = [random.randint(start,end) for i in range(3)]
#         return tuple(res)
#     def random_line(self,draw):
#         """
#         生成随机线
#         @param draw:draw对象 画笔
#         @return:
#         要生成两个点，才可以连接成一条线，点不能超过纸张长宽
#         """
#         for i in range(self.length):#生成干扰线的个数
#             #生成两个坐标
#             lines = [(random.randint(0,self.x),random.randint(0,self.y)) for i in range(2)]
#             draw.line(lines,fill = self.random_color(64,200))#连接两点并上色
#
#     def random_code(self,draw,rate):
#         '''
#         生成随机干扰点
#         @param draw: 画笔
#         @param rate: 生成点的概率
#         @return:
#         '''
#         for i in range(self.x):
#             for j in range(self.y):
#                 if random.randint(0,100)<=rate:
#                     draw.point((i,j),fill=self.random_color(62,200))
#     def  verify_code(self):
#         '''
#         生成验证码图片
#         @return: 图片及正确答案
#         '''
#         #创建image对象 创建画布
#         image = Image.new('RGB',(self.x,self.y),(255,255,255))#创建一个纯白画布
#         #创建font对象 字体
#         file = os.path.dirname(os.path.abspath(__file__))  # 获取到当前文件的绝对路径
#         font = ImageFont.truetype(f'{file}/HYYakuHei-85W.ttf', self.size)  # 得到所需要的字体
#         #创建draw对象 画笔 绘制图形，线，点
#         draw = ImageDraw.Draw(image)
#         #绘制干扰线 干扰点
#         self.random_line(draw)
#         self.random_code(draw,30)
#         #随机生成字符答案，验证码值
#         code = self.random_str()
#         #用画笔将font类型字体对应的进行字符内容和颜色的绘制
#         for i in range(self.length):
#             draw.text((35*i,3),code[i],font=font,fill=self.random_color(30,128))
#         #模糊滤镜
#         image = image.filter(ImageFilter.BLUR)
#         #返回图形及验证码值
#         return image, code
# def jwt_token(token,user=None,request=None):
#     '''
#     自定义登入成功后的相应函数
#     执行这一步函数，即账号密码已经正确，手动校验验证码即可
#     使用jwt自带的登陆视图函数，别人已经写好了，校验登陆信息，、
#     你在路由那里导入，然后定义路由；调用这个路由就需要传用户名密码；
#     用户名密码正确就会走settings设置的这个函数；发放token以及相关的信息
#     @param token:令牌
#     @param user:登入的用户
#     @param request:请求的对象
#     @return:登入接口响应的内容 token
#     '''
#     param = request.data
#     uuid = param.get('uuid')
#     verify = param.get('verify')
#     if not uuid or not verify:
#         return {'mgs':'请输入验证码'}
#
#     #得到redis缓存的该客户端验证码答案与传输进来的验证码进行比对判断
#     cache = get_redis_connection(alias='verify_code')
#     redis_verify = cache.get(LOGIN_KEY_TEMPLATE % uuid)
#     #试完即删防止暴力拆解
#     cache.delete(LOGIN_KEY_TEMPLATE % uuid)
#     if not redis_verify:
#         return {'msg':'验证码过期'}
#     if redis_verify.upper() != verify.upper():
#         return {'msg':'验证码错误'}
#     return {
#         'token':token,
#         'id':user.id,
#         'username':user.username,
#
#     }
#
# if __name__ == '__main__':
#     imageVerify = ImageVerify()
#     img,code = imageVerify.verify_code()
#     with open('text.png','wb') as fp:
#         img.save(fp)
#     print(code)
